Now we listen to the reorder signal.
authorJonathan Blandford <jrb@redhat.com>
Fri, 30 Mar 2001 01:26:30 +0000 (01:26 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Fri, 30 Mar 2001 01:26:30 +0000 (01:26 +0000)
Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>

        * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
        listen to the reorder signal.

12 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/gtk/tmpl/gtktreeviewcolumn.sgml
gtk/gtkliststore.c
gtk/gtktreemodel.c
gtk/gtktreemodel.h
gtk/gtktreeview.c

index 2b174c1989ac909e57ffaf7b024ade7f41418958..7502ac999f3ceadebb05fa59e80aa5bc96abc60f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
+       listen to the reorder signal.
+
 Wed Mar 28 20:30:26 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.[ch] (_gtk_widget_get_aux_info): Add private function
index 2b174c1989ac909e57ffaf7b024ade7f41418958..7502ac999f3ceadebb05fa59e80aa5bc96abc60f 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
+       listen to the reorder signal.
+
 Wed Mar 28 20:30:26 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.[ch] (_gtk_widget_get_aux_info): Add private function
index 2b174c1989ac909e57ffaf7b024ade7f41418958..7502ac999f3ceadebb05fa59e80aa5bc96abc60f 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
+       listen to the reorder signal.
+
 Wed Mar 28 20:30:26 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.[ch] (_gtk_widget_get_aux_info): Add private function
index 2b174c1989ac909e57ffaf7b024ade7f41418958..7502ac999f3ceadebb05fa59e80aa5bc96abc60f 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
+       listen to the reorder signal.
+
 Wed Mar 28 20:30:26 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.[ch] (_gtk_widget_get_aux_info): Add private function
index 2b174c1989ac909e57ffaf7b024ade7f41418958..7502ac999f3ceadebb05fa59e80aa5bc96abc60f 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
+       listen to the reorder signal.
+
 Wed Mar 28 20:30:26 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.[ch] (_gtk_widget_get_aux_info): Add private function
index 2b174c1989ac909e57ffaf7b024ade7f41418958..7502ac999f3ceadebb05fa59e80aa5bc96abc60f 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
+       listen to the reorder signal.
+
 Wed Mar 28 20:30:26 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.[ch] (_gtk_widget_get_aux_info): Add private function
index 2b174c1989ac909e57ffaf7b024ade7f41418958..7502ac999f3ceadebb05fa59e80aa5bc96abc60f 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 29 20:20:38 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodel.c (gtk_tree_row_ref_reordered_callback): Now we
+       listen to the reorder signal.
+
 Wed Mar 28 20:30:26 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkwidget.[ch] (_gtk_widget_get_aux_info): Add private function
index 1164d6817b0c305f47ef3a39cfdf4cfab8a87316..95a3ae582956af8ec64004bd85ebb58cbd6b27a9 100644 (file)
@@ -34,6 +34,7 @@ GtkTreeViewColumn
 @alignment: 
 @window: 
 @xalign: 
+@model_changed_signal: 
 @width: 
 @min_width: 
 @max_width: 
@@ -45,7 +46,8 @@ GtkTreeViewColumn
 @cell: 
 @attributes: 
 @column_type: 
-@sort_signal: 
+@sort_clicked_signal: 
+@sort_column_changed_signal: 
 @sort_column_id: 
 @sort_order: 
 @visible: 
index 68cf78b9cb80479573324a7ae5db2e9376a2a1af..910ac9499ccae427872a55c74418fdc7ccf5f943 100644 (file)
@@ -79,6 +79,7 @@ static gboolean gtk_list_store_row_drop_possible  (GtkTreeDragDest   *drag_dest,
                                                    GtkTreePath       *src_path,
                                                    GtkTreePath       *dest_path);
 
+
 /* sortable */
 static void     gtk_list_store_sort                    (GtkListStore           *list_store);
 static void     gtk_list_store_sort_iter_changed       (GtkListStore           *list_store,
@@ -96,8 +97,6 @@ static void     gtk_list_store_sort_column_id_set_func (GtkTreeSortable        *
                                                        GtkDestroyNotify        destroy);
 
 
-
-
 static void
 validate_list_store (GtkListStore *list_store)
 {
index b7b6aaf63f2be599feff40ee7b0c5e028fa3945f..2d7aa0171a9d37b7b17235e4ea977a4df0e0c8b3 100644 (file)
@@ -1234,6 +1234,58 @@ gtk_tree_row_ref_deleted_callback (GObject     *object,
     }
 }
 
+static void
+gtk_tree_row_ref_reordered_callback (GObject     *object,
+                                    GtkTreePath *path,
+                                    GtkTreeIter *iter,
+                                    gint        *new_order,
+                                    gpointer     data)
+{
+  RowRefList *refs = g_object_get_data (data, ROW_REF_DATA_STRING);
+  GSList *tmp_list;
+  gint length;
+
+  if (refs == NULL)
+    return;
+
+  tmp_list = refs->list;
+
+  while (tmp_list != NULL)
+    {
+      GtkTreeRowReference *reference = tmp_list->data;
+
+      length = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (reference->model), iter);
+
+      if (length < 2)
+       return;
+
+      if ((reference->path) &&
+         (gtk_tree_path_is_ancestor (path, reference->path)))
+       {
+         gint ref_depth = gtk_tree_path_get_depth (reference->path);
+         gint depth = gtk_tree_path_get_depth (path);
+
+         if (ref_depth > depth)
+           {
+             gint i;
+             gint *indices = gtk_tree_path_get_indices (reference->path);
+
+             for (i = 0; i < length; i++)
+               {
+                 if (new_order[i] == indices[depth])
+                   {
+                     indices[depth] = i;
+                     return;
+                   }
+               }
+           }
+       }
+
+      tmp_list = g_slist_next (tmp_list);
+    }
+  
+}
+     
 static void
 connect_ref_callbacks (GtkTreeModel *model)
 {
@@ -1252,6 +1304,14 @@ connect_ref_callbacks (GtkTreeModel *model)
                          NULL,
                          FALSE,
                          FALSE);
+
+  g_signal_connect_data (G_OBJECT (model),
+                         "reordered",
+                         (GCallback) gtk_tree_row_ref_reordered_callback,
+                        model,
+                         NULL,
+                         FALSE,
+                         FALSE);
 }
 
 static void
@@ -1267,6 +1327,11 @@ disconnect_ref_callbacks (GtkTreeModel *model)
                                         0, 0, NULL,
                                        gtk_tree_row_ref_deleted_callback,
                                        NULL);
+  g_signal_handlers_disconnect_matched (G_OBJECT (model),
+                                        G_SIGNAL_MATCH_FUNC,
+                                        0, 0, NULL,
+                                       gtk_tree_row_ref_reordered_callback,
+                                       NULL);
 }
 
 GtkTreeRowReference *
@@ -1288,9 +1353,7 @@ gtk_tree_row_reference_new_proxy (GObject      *proxy,
   GtkTreeRowReference *reference;
   RowRefList *refs;
 
-  g_return_val_if_fail (proxy != NULL, NULL);
   g_return_val_if_fail (G_IS_OBJECT (proxy), NULL);
-  g_return_val_if_fail (model != NULL, NULL);
   g_return_val_if_fail (GTK_IS_TREE_MODEL (model), NULL);
   g_return_val_if_fail (path != NULL, NULL);
 
@@ -1372,7 +1435,6 @@ void
 gtk_tree_row_reference_inserted (GObject     *proxy,
                                 GtkTreePath *path)
 {
-  g_return_if_fail (proxy != NULL);
   g_return_if_fail (G_IS_OBJECT (proxy));
 
   gtk_tree_row_ref_inserted_callback (NULL, path, NULL, proxy);
@@ -1383,8 +1445,19 @@ void
 gtk_tree_row_reference_deleted (GObject     *proxy,
                                GtkTreePath *path)
 {
-  g_return_if_fail (proxy != NULL);
   g_return_if_fail (G_IS_OBJECT (proxy));
 
   gtk_tree_row_ref_deleted_callback (NULL, path, proxy);
 }
+
+void
+gtk_tree_row_reference_reordered (GObject     *proxy,
+                                 GtkTreePath *path,
+                                 GtkTreeIter *iter,
+                                 gint        *new_order)
+{
+  g_return_if_fail (G_IS_OBJECT (proxy));
+
+  gtk_tree_row_ref_reordered_callback (NULL, path, iter, new_order, proxy);
+}
+  
index 80ed13aa6173194c583cd26be3f8d59d97b26237..ead525f0eea4d164380457e9d48e7011dcc41e5c 100644 (file)
@@ -154,6 +154,10 @@ void                 gtk_tree_row_reference_inserted  (GObject     *proxy,
                                                       GtkTreePath *path);
 void                 gtk_tree_row_reference_deleted   (GObject     *proxy,
                                                       GtkTreePath *path);
+void                 gtk_tree_row_reference_reordered (GObject     *proxy,
+                                                      GtkTreePath *path,
+                                                      GtkTreeIter *iter,
+                                                      gint        *new_order);
                                                       
 /* GtkTreeIter operations */
 GtkTreeIter *     gtk_tree_iter_copy             (GtkTreeIter  *iter);
index 3acfc3e2a5b490730c0a0f7e357895ba3f7ea300..f3a1fb0cf7c37ec5345aa999128a4bac06423aa9 100644 (file)
@@ -3025,6 +3025,11 @@ gtk_tree_view_reordered (GtkTreeModel *model,
   if (len < 2)
     return;
 
+  gtk_tree_row_reference_reordered (G_OBJECT (data),
+                                   parent,
+                                   iter,
+                                   new_order);
+
   if (_gtk_tree_view_find_node (tree_view,
                                parent,
                                &tree,